package com.zh.seckill.validator;


import com.zh.seckill.util.ValidatorUtil;
import org.springframework.util.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;


//自定义校验器
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {

    // 定义是否为必填项，默认为false
    private boolean required = false;

    /**
     * 初始化方法，用于设置是否为必填项
     *
     * @param constraintAnnotation 约束注解实例，用于获取必填项状态
     */
    @Override
    public void initialize(IsMobile constraintAnnotation) {
        //从约束注解中获取必填项状态
        required = constraintAnnotation.required();
    }

    /**
     * 验证给定的值是否有效
     * <p>
     * 当设置为必填项时，使用ValidatorUtil检查值是否为有效的手机号码
     * 当设置为非必填项时，如果值为空则认为是有效的；如果值不为空，则使用ValidatorUtil检查值是否为有效的手机号码
     * </p>
     *
     * @param value   待验证的值
     * @param context 约束验证上下文，可用于追加验证错误信息（此处未使用）
     * @return 如果值有效返回true，否则返回false
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 当设置为必填项时，必须是有效的手机号码
        if (required) {
            return ValidatorUtil.isMobile(value);
        } else { // 当设置为非必填项时，值可以为空，或者为有效的手机号码
            if (!StringUtils.hasText(value)) {
                return true;
            } else {
                return ValidatorUtil.isMobile(value);
            }
        }
    }

}
